﻿//#include <iostream>
//#include <string>
//#include <vector>
//#include <algorithm> 
//#include <deque>
//using namespace std;
////deque容器-双端数组，可以对头端进行插入删除
//
///*与vector容器区别
//1.vector对于头部的插入删除效率低，数据量越大，效率越低
//2.deque相对而言，对头部的插入删除速度回比vector快
//3.vector访问元素时的速度会比deque快，这和两者内部实现有关
//*/
//
///*
//deque内部有中控器维护每段缓冲区中的内容，缓冲区中存放真实数据
//中控器维护的是每个缓冲区的地址，使得使用deque时像一片连续的内存空间
//deque迭代器支持随机访问
//*/
//
///*-构造函数
//deque<T>deqT;       //默认构造形式
//deque(beg, end);    //构造函数将[beg，end)区间中的元素拷贝给本身。
//deque(n, elem);     //构造函数将n个elem拷贝给本身。
//deque(const deque &deq);    //拷贝构造函数
//*/
//void printDeque(const deque<int>& d)
//{
//    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
//    {
//        //*it = 100; // 容器中数据不可修改
//        cout << *it << " ";
//    }
//    cout << endl;
//}
//
//void test01()
//{
//    deque<int> d1;
//    for (int i = 0; i < 10; i++)
//    {
//        d1.push_back(i);
//    }
//    printDeque(d1);
//
//    deque<int>d2(d1.begin(), d1.end());
//    printDeque(d2);
//
//    deque<int>d3(10, 100);
//    printDeque(d3);
//
//    deque<int>d4(d3);
//    printDeque(d4);
//}
//
//void func001()
//{
//    test01();
//}
///*-赋值
//* deque& operator=(const deque &deq);       //重载等号操作符
//assign(beg, end);                           //将[beg，end)区间中的数据拷贝赋值给本身。
//assign(n, elem);                            //将n个elem拷贝赋值给本身。
//*/
//void test02()
//{
//    deque<int> d1;
//    for (int i = 0; i < 10; i++)
//    {
//        d1.push_back(i);
//    }
//    printDeque(d1);
//
//    //operator= 赋值
//    deque<int>d2;
//    d2 = d1;
//    printDeque(d2);
//
//    //assign 赋值
//    deque<int>d3;
//    d3.assign(d1.begin(), d1.end());
//    printDeque(d3);
//
//    //assign 
//    deque<int>d4;
//    d4.assign(10, 100);
//    printDeque(d4);
//
//}
//
//void func002()
//{
//    test02();
//}
///*-大小
//deque.empty();      //判断容器是否为空
//deque.size();       //返回容器中元素的个数
//deque.resize(num);  //重新指定容器的长度为num，若容器变长，则以默认值填充新位置。
//                    //如果容器变短，则末尾超出容器长度的元素被删除。
//deque.resize(num, elem);//重新指定容器的长度为num，若容器变长，则以elem值填充新位置。
//                        //如果容器变短，则末尾超出容器长度的元素被删除。
//*/
//
///*-两端插入
//push _back(elem);       //在容器尾部添加一个数据
//push_front(elem);       //在容器头部插入一个数据
//pop_back();             //删除容器最后一个数据
//pop_front();            //删除容器第一个数据
//*/
//
///*-指定位置
//insert(pos,elem);       //在pos位置插入一个elem元素的拷贝，返回新数据的位置。
//insert(pos,n,elem);     //在pos位置插入n个elem数据，无返回值。
//insert(pos,beg,end);    //在pos位置插入[beg,end)区间的数据，无返回值。
//clear();                //清空容器的所有数据
//erase(beg,end);         //删除[beg，end)区间的数据，返回下一个数据的位置。
//erase(pos);             //删除pos位置的数据，返回下一个数据的位置。
//*/
//
///*-数据存取
//at(int idx);        //返回索引idx所指的数据
//operator[];         //返回索引idx所指的数据
//front()；             //返回容器中第一个数据元素
//back();              //返回容器中最后一个数据元素
//*/
//
///*-排序
//sort(iterator beg，iterator end)//对beg和end区间内元素进行排序
//*/
//void test03()
//{
//    deque<int> d1;
//    d1.push_back(10);
//    d1.push_back(20);
//    d1.push_back(30);
//    d1.push_front(100);
//    d1.push_front(200);
//    d1.push_front(300);
//
//    printDeque(d1);
//
//    sort(d1.begin(), d1.end());
//    //对于支持随机访问的迭代器的容器，都可以利用sort排序
//    printDeque(d1);
//
//}
//
//void func003()
//{
//    test03();
//}
//
//int main()
//{
//    //func001();
//    //func002();
//    func003();
//    system("pause");
//    return 0;
//}
